/*     */ package com.zimbra.soap;
/*     */ 
/*     */ import com.zimbra.common.localconfig.LC;
/*     */ import com.zimbra.common.soap.Element;
/*     */ import com.zimbra.common.util.Log;
/*     */ import com.zimbra.common.util.ZimbraLog;
/*     */ import com.zimbra.cs.service.admin.AdminDocumentHandler;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Arrays;
/*     */ import java.util.Collections;
/*     */ import java.util.HashMap;
/*     */ import java.util.Map;
/*     */ import org.dom4j.QName;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public final class DocumentDispatcher
/*     */ {
/*     */   private static final String REQUEST_SUFFIX = "Request";
/*     */   private static final String RESPONSE_SUFFIX = "Response";
/*     */   private final Map<QName, DocumentHandler> handlers;
/*     */   private final Map<QName, QName> responses;
/*     */   private ArrayList<String> includeList;
/*     */   
/*     */   DocumentDispatcher()
/*     */   {
/*  46 */     this.handlers = new HashMap();
/*  47 */     this.responses = new HashMap();
/*     */     
/*  49 */     String whiteListString = LC.get("admin_soap_white_list");
/*  50 */     ZimbraLog.soap.debug("Loading admin SOAP white list");
/*  51 */     if (whiteListString.length() > 0) {
/*  52 */       this.includeList = new ArrayList(Arrays.asList(whiteListString.split("(,[\n\r]*)")));
/*     */     } else {
/*  54 */       ZimbraLog.soap.debug("No white list found. All available admin SOAP handlers will be loaded.");
/*     */     }
/*     */   }
/*     */   
/*     */   void clearSoapWhiteList() {
/*  59 */     if (this.includeList != null) {
/*  60 */       ZimbraLog.soap.debug("clearing admin SOAP white list");
/*  61 */       this.includeList.clear();
/*     */     }
/*     */   }
/*     */   
/*     */   public void registerHandler(QName qname, DocumentHandler handler) {
/*  66 */     if ((handler instanceof AdminDocumentHandler)) {
/*  67 */       if ((this.includeList != null) && (!this.includeList.isEmpty())) if (!this.includeList.contains(String.format("%s::%s", new Object[] { qname.getNamespaceURI(), qname.getQualifiedName() })))
/*     */         {
/*  69 */           ZimbraLog.soap.debug("skipping %s::%s", new Object[] { qname.getNamespaceURI(), qname.getQualifiedName() });
/*  70 */           return;
/*     */         }
/*  72 */       ZimbraLog.soap.debug("Registering %s::%s", new Object[] { qname.getNamespaceURI(), qname.getQualifiedName() });
/*     */     }
/*     */     
/*  75 */     this.handlers.put(qname, handler);
/*  76 */     QName respQName = (QName)this.responses.get(qname);
/*  77 */     if (respQName == null) {
/*  78 */       String reqName = qname.getName();
/*     */       String respName;
/*  80 */       String respName; if (reqName.endsWith("Request")) {
/*  81 */         respName = reqName.substring(0, reqName.length() - "Request".length()) + "Response";
/*     */       } else {
/*  83 */         respName = reqName + "Response";
/*     */       }
/*  85 */       respQName = new QName(respName, qname.getNamespace());
/*  86 */       this.responses.put(qname, respQName);
/*     */     }
/*  88 */     handler.setResponseQName(respQName);
/*     */   }
/*     */   
/*     */   public void unRegisterHandler(QName qname) {
/*  92 */     DocumentHandler qHandler = (DocumentHandler)this.handlers.get(qname);
/*  93 */     if (qHandler != null) {
/*  94 */       this.handlers.remove(qname);
/*     */     }
/*     */     
/*  97 */     QName respQName = (QName)this.responses.get(qname);
/*  98 */     if (respQName != null) {
/*  99 */       this.responses.remove(qname);
/*     */     }
/*     */   }
/*     */   
/*     */   DocumentHandler getHandler(Element doc) {
/* 104 */     DocumentHandler handler = (DocumentHandler)this.handlers.get(doc.getQName());
/* 105 */     return handler;
/*     */   }
/*     */   
/*     */   public Map<QName, DocumentHandler> getHandlers() {
/* 109 */     return Collections.unmodifiableMap(this.handlers);
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/soap/DocumentDispatcher.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */